home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 2: Applications / Linux Cubed Series 2 - Applications.iso / math / graphs / graphed-.1 / graphed- / usr / local / graphed / include / sgraph / sgraph.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-07-10  |  5.6 KB  |  218 lines

  1. /* (C) Universitaet Passau 1986-1994 */
  2. /* Sgraph Source, 1988-1994 by Michael Himsolt */
  3.  
  4. #ifndef SGRAPH_HEADER
  5. #define SGRAPH_HEADER
  6.  
  7. #ifndef SGRAPH_STANDALONE
  8. #define GRAPHED_POINTERS
  9. #define SGRAGRA_POINTERS
  10. #endif
  11.  
  12. #include <sgraph/std.h>
  13.  
  14. /************************************************************************/
  15. /*                                    */
  16. /*                Save / Restore Attributes            */
  17. /*                                    */
  18. /************************************************************************/
  19.  
  20. typedef    struct    saved_sgraph_attrs    {
  21.     Attributes    attrs;
  22.     void        (*make_node_proc)();
  23.     void        (*make_edge_proc)();
  24.     void        (*remove_node_proc)();
  25.     void        (*remove_edge_proc)();
  26.     void        (*remove_graph_proc)();
  27.     char        *key;
  28. }
  29.     *Saved_sgraph_attrs;
  30.  
  31. #define    empty_saved_sgraph_attrs (Saved_sgraph_attrs)NULL
  32.  
  33.  
  34. typedef    struct    saved_snode_attrs    {
  35.     Attributes    attrs;
  36.     char        *key;
  37. }
  38.     *Saved_snode_attrs;
  39.  
  40. #define    empty_saved_snode_attrs (Saved_snode_attrs)NULL
  41.  
  42.  
  43. typedef    struct    saved_sedge_attrs    {
  44.     Attributes    attrs;
  45.     char        *key;
  46. }
  47.     *Saved_sedge_attrs;
  48.  
  49. #define    empty_saved_sedge_attrs (Saved_sedge_attrs)NULL
  50.  
  51.  
  52.  
  53. /************************************************************************/
  54. /*                                    */
  55. /*                SGRAPH                    */
  56. /*                                    */
  57. /************************************************************************/
  58.  
  59.  
  60. typedef struct    sgraph {
  61.     struct    snode    *nodes;
  62.     char        *label;
  63.     int        directed;
  64. #ifdef GRAPHED_POINTERS
  65.     char        *graphed;
  66. #endif
  67.  
  68.     void        (*make_node_proc)();
  69.     void        (*make_edge_proc)();
  70.     void        (*remove_node_proc)();
  71.     void        (*remove_edge_proc)();
  72.     void        (*remove_graph_proc)();
  73.  
  74.     struct sgraph    *iso;
  75.  
  76.     Attributes    attrs;
  77.     struct slist    *saved_attrs;    /* List of saved attributes        */
  78.     char        *attrs_key;    /* key of current saved attributes */
  79. }
  80.     *Sgraph;
  81.  
  82. #define    first_node_in_graph(g)    ((g)->nodes)
  83. #define    last_node_in_graph(g)    ((g)->nodes->pre)
  84. #ifndef GRAPHED
  85. #define    empty_graph        ((Sgraph)NULL)
  86. #endif
  87. #define    empty_sgraph    ((Sgraph)NULL)
  88.  
  89. extern    Sgraph    make_graph     (Attributes attrs);
  90. extern    Sgraph    copy_sgraph    (Sgraph sgraph);
  91. extern    void    remove_graph   (Sgraph graph);
  92. extern    void    set_graphlabel (Sgraph graph, char *text);
  93. extern    void    print_graph    (FILE *file, Sgraph g, void (*print_graph_attributes) (), void (*print_node_attributes) (), void (*print_edge_attributes) ());
  94. extern    Sgraph    load_graph     ();
  95.  
  96.  
  97.  
  98. /************************************************************************/
  99. /*                                    */
  100. /*                SNODE                    */
  101. /*                                    */
  102. /************************************************************************/
  103.  
  104.  
  105. typedef    struct    snode {
  106.     struct    snode    *pre,   *suc;
  107.     struct    sedge    *slist, *tlist;
  108.     struct    sgraph    *graph;
  109.     char        *label;
  110.     int        nr;
  111.     int        x,y;
  112.     struct    snode    *iso;
  113.  
  114. #ifdef GRAPHED_POINTERS
  115.     char        *graphed;
  116. #endif
  117. #ifdef SGRAGRA_POINTERS
  118.     char        *embedding;
  119. #endif
  120.     struct    snode    *filter;
  121.  
  122.     Attributes    attrs;
  123.     struct slist    *saved_attrs;    /* List of saved attributes        */
  124.     char        *attrs_key;    /* key of current saved attributes */
  125. }
  126.     *Snode;
  127.  
  128. #ifndef GRAPHED
  129. #define    empty_node    ((Snode)NULL)
  130. #endif
  131. #define    empty_snode    ((Snode)NULL)
  132.  
  133. #define snode_x(n) ((n)->x)
  134. #define snode_y(n) ((n)->y)
  135.  
  136. #define    for_all_nodes(graph, node) \
  137.     { if (((node) = (graph)->nodes) != (Snode)NULL) do {
  138. #define    end_for_all_nodes(graph, node) \
  139.     } while (((node) = (node)->suc) != (graph)->nodes); }
  140.  
  141. extern    Snode    make_node             (Sgraph graph, Attributes attrs);
  142. extern    Snode    make_node_with_number (Sgraph graph, Attributes attrs, int nr);
  143. extern    Snode    copy_snode            (Snode snode);
  144. extern    void    remove_node           (Snode node);
  145. extern    void    set_nodelabel         (Snode node, char *text);
  146. extern    void    set_nodefilter        (Snode node, Snode filter);
  147. extern    Snode    get_nodefilter        (Snode node, Snode filter);
  148. extern    void    set_node_xy           (Snode node, int x, int y);
  149.  
  150.  
  151.  
  152. /************************************************************************/
  153. /*                                    */
  154. /*                SEDGE                    */
  155. /*                                    */
  156. /************************************************************************/
  157.  
  158.  
  159. typedef    struct    sedge {
  160.     struct    sedge    *spre,  *ssuc,
  161.             *tpre,  *tsuc;
  162.     struct    snode    *snode, *tnode;
  163.     char        *label;
  164. #ifdef GRAPHED_POINTERS
  165.     char        *graphed;
  166. #endif
  167.     struct    sedge    *filter;
  168.  
  169.     Attributes    attrs;
  170.     struct slist     *saved_attrs;    /* List of saved attributes        */
  171.     char        *attrs_key;    /* key of current saved attributes */
  172. }
  173.     *Sedge;
  174.  
  175.  
  176. #ifndef GRAPHED
  177. #define    empty_edge    ((Sedge)NULL)
  178. #endif
  179. #define empty_sedge    ((Sedge)NULL)
  180.  
  181. #include <sgraph/slist.h>
  182.  
  183. extern    Sedge    make_edge     (Snode snode, Snode tnode, Attributes attrs);
  184. extern    Sedge    copy_sedge     (Sedge sedge);
  185. extern    void    remove_edge   (Sedge edge);
  186. extern    void    set_edgelabel (Sedge edge, char *text);
  187. extern    void    set_edgefilter (Sedge edge, Sedge filter);
  188. extern    Sedge    get_edgefilter (Sedge edge, Sedge filter);
  189.  
  190. extern    void    set_nodeattrs (Snode node, Attributes attrs);
  191. extern    void    set_edgeattrs (Sedge edge, Attributes attrs);
  192. extern    void    set_graphattrs (Sgraph graph, Attributes attrs);
  193.  
  194. extern void save_sgraph_attrs(Sgraph graph, char *key);
  195. extern void restore_sgraph_attrs(Sgraph graph, char *key,
  196.             void (*make_node_proc)(), void (*make_edge_proc)(), int remove);
  197.  
  198. extern    void    set_graph_directed (Sgraph graph, int directed);
  199.  
  200.  
  201. #define    for_sourcelist(node, edge)        \
  202.     { if (((edge) = (node)->slist) != (Sedge)NULL) do {
  203. #define    end_for_sourcelist(node, edge)    \
  204.     } while (((edge) = (edge)->ssuc) != (node)->slist); }
  205. #define    for_targetlist(node, edge)        \
  206.     { if (((edge) = (node)->tlist) != (Sedge)NULL) do {
  207. #define    end_for_targetlist(node, edge)    \
  208.     } while (((edge) = (edge)->tsuc) != (node)->tlist); }
  209.  
  210. #define for_edgelist(node,edge) for_sourcelist(node,edge)
  211. #define end_for_edgelist(node,edge) end_for_sourcelist(node,edge)
  212.  
  213. #define unique_edge(e) ((e) < (e)->tsuc)
  214.  
  215. extern    Sedge    get_unique_edge_handle(Sedge edge);
  216.  
  217. #endif
  218.